package com.boss.salary.service;

import com.alibaba.fastjson.JSONObject;
import com.boss.common.entity.PageDTO;
import com.boss.framework.dto.PaginationDTO;
import com.boss.framework.exception.AppRuntimeException;
import com.boss.salary.vo.SalaryDataVo;
import com.boss.sys.ca.user.dto.UserDTO;

import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;

public interface IGenerateBankDataService {

    /**
     * 生成银行数据：条件查询
     * @param paginationDTO
     * @param queryForm
     * @return
     */
    PageDTO<SalaryDataVo> getGenerateBankDataPage(PaginationDTO paginationDTO, Map<String, Object> queryForm, UserDTO userDTO);

    /**
     * 生成银行数据：查询人员工资明细列表
     * @param paginationDTO
     * @param queryForm
     * @return
     */
    PageDTO<Map<String, Object>> getPersonSalaryInfoPage(UserDTO userDTO,PaginationDTO paginationDTO, Map<String, Object> queryForm);


    /**
     * 上传银行数据到Sftp服务器
     * @param province
     */
    void uploadBankData(String province,String sendBankCode);

    /**
     * 上传工资数据到Sftp服务器
     * @return
     * @param province
     */
    JSONObject uploadSalaryData(String province,String sendBankCode);

    /**
     * 重新生成银行数据
     * @param province
     */
    void regenerateBankData(String province,String sendBankCode);

    /**
     * 生成工资数据
     * @param province
     */
    JSONObject generateSalaryData(String province,String salaBank);
    /**
     * 撤销生成工资数据
     * @param province
     */
    void ungenerateBankData(String province,String sendBankCode) throws AppRuntimeException;
    /**
     * 撤销生成工资数据
     * @param province
     */
    JSONObject ungenerateSalaryData(String province,String salaBank);

    /**
     * 生成银行数据
     * @param province
     */
    void generateBankData(String province,Map<String,Object> queryForm);

    /**
     * 验证文件生成和上传状态
     * @return
     */
    boolean verifyFileState(String province);

    /**
     * 生成并导出银行数据
     * @param userDTO
     * @param outputStream
     */
    void generateBankDataService(UserDTO userDTO, OutputStream outputStream) throws IOException;

    /**
     * 获取生成银行数据信息
     * @param queryForm
     * @param userDTO
     * @return
     */
    List<Map<String, Object>> getGenerateMessage(Map<String, Object> queryForm, UserDTO userDTO);

}
